home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / printing / virtua / virtual.frm < prev    next >
Text File  |  1994-10-17  |  16KB  |  560 lines

  1. VERSION 2.00
  2. Begin Form virtual 
  3.    BackColor       =   &H00C0C0C0&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Virtual Printing Demo"
  6.    ClientHeight    =   5565
  7.    ClientLeft      =   1635
  8.    ClientTop       =   1545
  9.    ClientWidth     =   9450
  10.    Height          =   6000
  11.    Left            =   1560
  12.    LinkTopic       =   "Form1"
  13.    MaxButton       =   0   'False
  14.    MinButton       =   0   'False
  15.    ScaleHeight     =   5565
  16.    ScaleWidth      =   9450
  17.    Top             =   1185
  18.    Width           =   9600
  19.    Begin PictureBox Picture2 
  20.       Align           =   1  'Align Top
  21.       BackColor       =   &H00C0C0C0&
  22.       BorderStyle     =   0  'None
  23.       Height          =   495
  24.       Left            =   0
  25.       ScaleHeight     =   495
  26.       ScaleWidth      =   9450
  27.       TabIndex        =   0
  28.       Top             =   0
  29.       Width           =   9450
  30.       Begin CommonDialog CMDialog1 
  31.          CancelError     =   -1  'True
  32.          DefaultExt      =   "*.mdb"
  33.          DialogTitle     =   "Location of crystal.mdb"
  34.          Filename        =   "*.mdb"
  35.          Filter          =   "*.mdb"
  36.          Left            =   0
  37.          Top             =   0
  38.       End
  39.       Begin PictureBox btnMove 
  40.          BorderStyle     =   0  'None
  41.          Height          =   330
  42.          Index           =   3
  43.          Left            =   7155
  44.          Picture         =   VIRTUAL.FRX:0000
  45.          ScaleHeight     =   330
  46.          ScaleWidth      =   360
  47.          TabIndex        =   10
  48.          Tag             =   "Last Page"
  49.          Top             =   90
  50.          Width           =   360
  51.       End
  52.       Begin PictureBox btnMove 
  53.          BorderStyle     =   0  'None
  54.          Height          =   330
  55.          Index           =   0
  56.          Left            =   6120
  57.          Picture         =   VIRTUAL.FRX:0182
  58.          ScaleHeight     =   330
  59.          ScaleWidth      =   360
  60.          TabIndex        =   9
  61.          Tag             =   "First Page"
  62.          Top             =   90
  63.          Width           =   360
  64.       End
  65.       Begin PictureBox btnMove 
  66.          BorderStyle     =   0  'None
  67.          Height          =   330
  68.          Index           =   2
  69.          Left            =   6810
  70.          Picture         =   VIRTUAL.FRX:0304
  71.          ScaleHeight     =   330
  72.          ScaleWidth      =   360
  73.          TabIndex        =   8
  74.          Tag             =   "Next Page"
  75.          Top             =   90
  76.          Width           =   360
  77.       End
  78.       Begin PictureBox btnMove 
  79.          BorderStyle     =   0  'None
  80.          Height          =   330
  81.          Index           =   1
  82.          Left            =   6465
  83.          Picture         =   VIRTUAL.FRX:0486
  84.          ScaleHeight     =   330
  85.          ScaleWidth      =   360
  86.          TabIndex        =   7
  87.          Tag             =   "Previous Page"
  88.          Top             =   90
  89.          Width           =   360
  90.       End
  91.       Begin SSPanel lbPage 
  92.          BevelInner      =   1  'Inset
  93.          BevelOuter      =   0  'None
  94.          Caption         =   "Page 99 of 99"
  95.          ForeColor       =   &H00000000&
  96.          Height          =   375
  97.          Left            =   7680
  98.          TabIndex        =   6
  99.          Top             =   60
  100.          Width           =   1695
  101.       End
  102.       Begin ComboBox cmbZoom 
  103.          Height          =   300
  104.          Left            =   4800
  105.          Style           =   2  'Dropdown List
  106.          TabIndex        =   4
  107.          Top             =   105
  108.          Width           =   975
  109.       End
  110.       Begin PictureBox Picture1 
  111.          BackColor       =   &H00C0C0C0&
  112.          BorderStyle     =   0  'None
  113.          Height          =   255
  114.          Left            =   6000
  115.          ScaleHeight     =   255
  116.          ScaleWidth      =   255
  117.          TabIndex        =   3
  118.          Top             =   0
  119.          Width           =   255
  120.       End
  121.       Begin CommandButton btnClose 
  122.          Cancel          =   -1  'True
  123.          Caption         =   "&Close"
  124.          Height          =   405
  125.          Left            =   1485
  126.          TabIndex        =   2
  127.          TabStop         =   0   'False
  128.          Top             =   45
  129.          Width           =   1300
  130.       End
  131.       Begin CommandButton btnPrint 
  132.          Caption         =   "&Print"
  133.          Height          =   405
  134.          Left            =   180
  135.          TabIndex        =   1
  136.          TabStop         =   0   'False
  137.          Top             =   45
  138.          Width           =   1300
  139.       End
  140.       Begin Label Label1 
  141.          AutoSize        =   -1  'True
  142.          BackColor       =   &H00C0C0C0&
  143.          Caption         =   "&Zoom:"
  144.          Height          =   195
  145.          Index           =   0
  146.          Left            =   4200
  147.          TabIndex        =   5
  148.          Top             =   150
  149.          Width           =   540
  150.       End
  151.    End
  152.    Begin vsViewPort vPort 
  153.       BackColor       =   &H00808080&
  154.       Height          =   5655
  155.       Left            =   0
  156.       Top             =   490
  157.       VirtualHeight   =   0
  158.       VirtualWidth    =   0
  159.       Width           =   9610
  160.       Begin vsPrinter vPrint 
  161.          AbortCaption    =   ""
  162.          BorderStyle     =   0  'None
  163.          BrushStyle      =   1  'Transparent
  164.          FontName        =   "Arial"
  165.          FontSize        =   10
  166.          HdrFontName     =   "Arial"
  167.          HdrFontSize     =   10
  168.          Height          =   5500
  169.          Left            =   0
  170.          TableBorder     =   0  'None
  171.          TableSep        =   "|;"
  172.          Top             =   0
  173.          Width           =   9460
  174.       End
  175.    End
  176. End
  177. '=======================================================================
  178. '
  179. '  Virtual vsView.vbx demo
  180. '
  181. '  demonstrated virtual memory programming of the vsView
  182. '  print preview vbx
  183. '
  184. '  overcomes the speed and memory barriers of the
  185. '  vsView.vbx
  186. '
  187. '  but, unfortunately, demonstrates the header problem
  188. '
  189. '  written by Brian C. Hayes
  190. '             CIS 74653,1760
  191. '             October 18, 1994
  192. '
  193. '  If you feel it has any merit, use and distribute freely.
  194. '
  195. '  Comments and criticism welcome.
  196. '
  197. '=======================================================================
  198.  
  199. Dim fmt$                'column width and alignment string
  200. Dim TableHeader$        'Column Headings
  201. Dim HeaderStr$          'page header
  202. Dim FooterStr$          'page footer
  203. Dim numFields%          'number of columns in report
  204. Dim curRow%             'current line (record) to print
  205. Dim CurPage%            'currently displayed page
  206. Dim LastPage%           'last page number of the document
  207. Dim NextPage%           'flag if a next page exists
  208. Dim EndOfPage%          'flag when page ends
  209. Dim PageRow%(1 To 100)  'first bookmark (row) on each page
  210. Dim dbName$
  211.  
  212. Sub btnClose_Click ()
  213.     virtual.Visible = False
  214.     End
  215. End Sub
  216.  
  217. Sub btnMove_Click (Index As Integer)
  218.     Select Case Index
  219.        Case 0
  220.           CurPage = 1
  221.        Case 1
  222.           CurPage = CurPage - 1
  223.        Case 2
  224.           CurPage = CurPage + 1
  225.        Case 3
  226.           CurPage = LastPage
  227.     End Select
  228.     Screen.MousePointer = HOURGLASS
  229.     TablePreview
  230.     Screen.MousePointer = Default
  231. End Sub
  232.  
  233. Sub btnPrint_Click ()
  234.     Picture2.SetFocus   'don't highlight the button
  235.     Screen.MousePointer = HOURGLASS
  236.     vPrint.Preview = False
  237.     TablePreview
  238.     vPrint.Preview = True
  239.     Screen.MousePointer = Default
  240. End Sub
  241.  
  242. Sub CheckMoveBtns ()
  243.     If NextPage Then
  244.        'not on last page yet
  245.        PageRow(CurPage + 1) = curRow
  246.        btnMove(2).Picture = ArtForm.Image1(5).Picture
  247.        btnMove(2).Enabled = True
  248.     Else
  249.        'last page of document
  250.        LastPage = CurPage
  251.        btnMove(2).Picture = ArtForm.Image1(4).Picture
  252.        btnMove(2).Enabled = False
  253.     End If
  254.  
  255.     If CurPage < 2 Then
  256.        btnMove(1).Picture = ArtForm.Image1(6).Picture
  257.        btnMove(1).Enabled = False
  258.        btnMove(0).Picture = ArtForm.Image1(0).Picture
  259.        btnMove(0).Enabled = False
  260.     Else
  261.        btnMove(1).Picture = ArtForm.Image1(7).Picture
  262.        btnMove(1).Enabled = True
  263.        btnMove(0).Picture = ArtForm.Image1(1).Picture
  264.        btnMove(0).Enabled = True
  265.     End If
  266.  
  267.     If LastPage <> 0 Then
  268.        If CurPage < LastPage Then
  269.           btnMove(3).Picture = ArtForm.Image1(3).Picture
  270.           btnMove(3).Enabled = True
  271.        Else
  272.           btnMove(3).Picture = ArtForm.Image1(2).Picture
  273.           btnMove(3).Enabled = False
  274.        End If
  275.     Else
  276.        btnMove(3).Picture = ArtForm.Image1(2).Picture
  277.        btnMove(3).Enabled = False
  278.     End If
  279. End Sub
  280.  
  281. Sub cmbZoom_Click ()
  282.     vPrint.Visible = False
  283.  
  284.     'resize the page
  285.     vPrint.Width = vPrint.PageWidth * Val(cmbZoom) / 100
  286.     vPrint.Height = vPrint.PageHeight * Val(cmbZoom) / 100
  287.     vPort.VirtualWidth = vPrint.Width + 400
  288.     vPort.VirtualHeight = vPrint.Height + 400
  289.  
  290.     'center picture if its small
  291.     If vPrint.Width < vPort.Width Then
  292.        vPrint.Left = (vPort.Width - vPrint.Width) / 2
  293.     End If
  294.     If vPrint.Height < vPort.Height Then
  295.        vPrint.Top = (vPort.Height - vPrint.Height) / 2
  296.     End If
  297.     If Val(cmbZoom) > 99 Then
  298.        vPrint.Top = 0
  299.        vPrint.Left = 0
  300.     End If
  301.     vPrint.Visible = True
  302. End Sub
  303.  
  304. Sub DeriveHeader ()
  305.     
  306.     '==================================================================
  307.     'Because virtual printing is used, cannot use the usual "Page d%"
  308.     'method of printing page number in headers/footers.  Therefore,
  309.     'derive header must be called for each page.
  310.     '
  311.     '   (In my complete application, the user has complete control
  312.     '    over the headers and footers through an Options function,
  313.     '    thus, DeriveHeader is much more complicated than this demo)
  314.     '==================================================================
  315.  
  316.     HeaderStr = Format$(Now, "dd-mmm-yyyy") & "|" & "|" & "Page " & Trim$(Str$(CurPage))
  317.     FooterStr = "FooterLeft" & "|" & "vsView Virtual Printing Demo" & "|" & "FooterRight"
  318.     vPrint.Header = HeaderStr
  319.     vPrint.Footer = FooterStr
  320. End Sub
  321.  
  322. Function EstNumPages% (RowsPerPage%)
  323.     
  324.     '==================================================================
  325.     'Returns an estimate of the number of pages based on the number of
  326.     'records in dynaset and the number of rows printed on the first page.
  327.     '
  328.     'Because the document is constructed one page at a time, the total
  329.     'number of pages in the document is not known until the user has
  330.     'paged to the last page.
  331.     '
  332.     'Therefore, EstNumPages is used in the Page Indicator section of the
  333.     'toolbar until the actual number of pages is known.  Once the last
  334.     'page is actually known, the Page Indicator refers to the actual
  335.     'last page number, stored in the form-level integer 'LastPage'.
  336.     '==================================================================
  337.  
  338.     Dim x%
  339.  
  340.     If RowsPerPage Then
  341.        x = gDS.RecordCount / (RowsPerPage + 2)
  342.        If x > Int(x) / x Then
  343.           EstNumPages = Int(x) + 1
  344.        Else
  345.           EstNumPages = Int(x)
  346.        End If
  347.     Else
  348.        EstNumPages = 1
  349.     End If
  350. End Function
  351.  
  352. Sub FindDBFile ()
  353.     On Error Resume Next
  354.     CMDialog1.Action = 1
  355.     If Err = 32755 Then End
  356.     dbName = CMDialog1.Filename
  357.     If Right$(UCase$(dbName), 11) <> UCase$("crystal.mdb") Then
  358.        End
  359.     End If
  360.     dbName = CMDialog1.Filename
  361. End Sub
  362.  
  363. Sub Form_Load ()
  364.     virtual.WindowState = MAXIMIZED
  365.     vPort.Height = 6420
  366.     vPort.Width = 9610
  367.     vPrint.Height = 6420
  368.     vPrint.Width = 9610
  369.  
  370.     cmbZoom.AddItem "35%"
  371.     cmbZoom.AddItem "50%"
  372.     cmbZoom.AddItem "75%"
  373.     cmbZoom.AddItem "100%"
  374.     cmbZoom.AddItem "150%"
  375.     cmbZoom.AddItem "200%"
  376.  
  377.     btnPrint.Enabled = False
  378.  
  379.     'find crystal.mdb
  380.     FindDBFile
  381.  
  382.     API_ResetStopWatch
  383.     GetResultSet
  384.     qTime = API_StopWatch()
  385.  
  386.     API_ResetStopWatch
  387.     vPrint.Preview = True
  388.  
  389.     InitTable
  390.  
  391.     'display the first page
  392.     TablePreview
  393.  
  394.     'display timing window
  395.     ptime = API_StopWatch()
  396.     timing.Show MODAL
  397. End Sub
  398.  
  399. Function GetNextLine (row%) As String
  400.  
  401.     '==================================================================
  402.     'Returns the next record from the result set as formatted text.
  403.     'Called from the TablePreview procedure after each line is printed.
  404.     '
  405.     'The format (column width and alignment) was initialy derived in
  406.     'the TableInit procedure and stored in the form-level string
  407.     'variable 'fmt'.
  408.     '
  409.     '==================================================================
  410.  
  411.     Dim t$, separator$
  412.     Dim i%
  413.  
  414.     'return if no more data in result set
  415.     If row > gDS.RecordCount - 1 Then
  416.        NextPage = False
  417.        vPrint.Action = 6
  418.        GetNextLine = ""
  419.        Exit Function
  420.     End If
  421.  
  422.     'point to appropriate row in the result set
  423.     gDS.Bookmark = gBookmarks(row)
  424.     For i = 0 To numFields
  425.        If i < numFields Then
  426.           separator = "|"
  427.        Else
  428.           separator = ";"
  429.        End If
  430.        t = t & Str$(gDS(i)) & separator
  431.     Next
  432.     GetNextLine = fmt & t
  433. End Function
  434.  
  435. Function GetPageIndicator$ ()
  436.  
  437.     Dim page$
  438.     page = "Page " & Trim$(Str$(CurPage)) & " of "
  439.     If LastPage Then
  440.        page = page & Trim$(Str$(LastPage))
  441.     Else
  442.        page = page & Trim$(Str$(EstNumPages(PageRow(2))))
  443.     End If
  444.     GetPageIndicator = page
  445. End Function
  446.  
  447. Sub GetResultSet ()
  448.     Dim SQLQ$
  449.     Dim c%
  450.  
  451.     SQLQ = "Select OrderNum,ItemNum,Qty,Price FROM Detail ORDER BY OrderNum"
  452.     Set gDB = OpenDatabase(dbName)
  453.     Set gDS = gDB.CreateDynaset(SQLQ)
  454.  
  455.     'store bookmarks in array
  456.     gDS.MoveLast
  457.     ReDim gBookmarks$(gDS.RecordCount)
  458.     gDS.MoveFirst
  459.     While Not gDS.EOF
  460.        c = c + 1
  461.        gBookmarks(c - 1) = gDS.Bookmark
  462.        gDS.MoveNext
  463.     Wend
  464.  
  465. End Sub
  466.  
  467. Sub InitTable ()
  468.     'Initialize Table Information
  469.     numFields = 3
  470.     fmt = "1500|^1500|>1000|>1500;"
  471.     TableHeader = "Order Number|Item Number|Quantity|Price;"
  472.     
  473.     'format header and footer characteristics
  474.     vPrint.HdrFontName = "Arial"
  475.     vPrint.HdrFontSize = 10
  476.     vPrint.HdrFontBold = False
  477.     vPrint.HdrFontItalic = False
  478.  
  479.     cmbZoom.ListIndex = 3
  480.     CurPage = 1
  481.     PageRow(1) = 0
  482. End Sub
  483.  
  484. Sub PrintTableHeader ()
  485.  
  486.     '==================================================================
  487.     'Prints the TableHeader (column labels) at the start of each page.
  488.     '==================================================================
  489.     
  490.     vPrint.TextAlign = 1
  491.     vPrint = ""
  492.     vPrint.FontBold = True
  493.     vPrint.Table = fmt & TableHeader
  494.     vPrint.FontBold = False
  495. End Sub
  496.  
  497. Sub PrintTitle ()
  498.     vPrint = ""
  499.     vPrint.FontName = "Arial"
  500.     vPrint.FontSize = 14
  501.     vPrint.FontBold = True
  502.     vPrint.FontItalic = True
  503.     vPrint.FontUnderline = False
  504.     vPrint = "Sample Data Results"
  505. End Sub
  506.  
  507. Sub TablePreview ()
  508.  
  509.     Dim pageIndicator$
  510.     Dim x%
  511.     Dim t$
  512.  
  513.     Screen.MousePointer = HOURGLASS
  514.  
  515.     DeriveHeader
  516.  
  517.     vPrint.Action = 3       'Start Document
  518.     vPrint.TextAlign = 1    'center alignment
  519.     
  520.     If CurPage = 1 Then
  521.        PrintTitle
  522.     End If
  523.     
  524.     'Set table formatting information
  525.     vPrint.PenWidth = 2
  526.     vPrint.FontSize = 10
  527.     vPrint.FontItalic = False
  528.     vPrint.FontUnderline = False
  529.     vPrint.FontName = "Times New Roman"
  530.  
  531.     'print the table
  532.     curRow = PageRow(CurPage)
  533.     EndOfPage = False
  534.     NextPage = False
  535.     PrintTableHeader
  536.     While Not EndOfPage
  537.        t = GetNextLine(curRow)
  538.        If t <> "" Then
  539.           vPrint.Table = t
  540.           curRow = curRow + 1
  541.        Else
  542.           NextPage = False
  543.           EndOfPage = True
  544.        End If
  545.     Wend
  546.     CheckMoveBtns
  547.     vPrint.Action = 6   'end doc
  548.  
  549.     'print the page indicator in the toolbar
  550.     lbPage.Caption = GetPageIndicator()
  551.  
  552.     Screen.MousePointer = Default
  553. End Sub
  554.  
  555. Sub vPrint_EndPage ()
  556.     EndOfPage = True
  557.     NextPage = True
  558. End Sub
  559.  
  560.